home *** CD-ROM | disk | FTP | other *** search
/ Reverse Code Engineering RCE CD +sandman 2000 / ReverseCodeEngineeringRceCdsandman2000.iso / RCE / Ebooks / Thinking in C++ V2 / C12 / Reflex.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-25  |  795 b   |  35 lines

  1. //: C12:Reflex.cpp
  2. // From Thinking in C++, 2nd Edition
  3. // Available at http://www.BruceEckel.com
  4. // (c) Bruce Eckel 1999
  5. // Copyright notice in Copyright.txt
  6. // Reflexivity in overloading
  7.  
  8. class Number {
  9.   int i;
  10. public:
  11.   Number(int ii = 0) : i(ii) {}
  12.   const Number
  13.   operator+(const Number& n) const {
  14.     return Number(i + n.i);
  15.   }
  16.   friend const Number
  17.     operator-(const Number&, const Number&);
  18. };
  19.  
  20. const Number
  21.   operator-(const Number& n1,
  22.             const Number& n2) {
  23.     return Number(n1.i - n2.i);
  24. }
  25.  
  26. int main() {
  27.   Number a(47), b(11);
  28.   a + b; // OK
  29.   a + 1; // 2nd arg converted to Number
  30. //! 1 + a; // Wrong! 1st arg not of type Number
  31.   a - b; // OK
  32.   a - 1; // 2nd arg converted to Number
  33.   1 - a; // 1st arg converted to Number
  34. } ///:~
  35.